package ucla.axelia.reportes;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReporteActividadesPorVoluntario;
import ucla.axelia.modelo.beans.ClasificacionVoluntario;
import ucla.axelia.modelo.data.Voluntario;

import nextapp.echo2.app.Column;
import nextapp.echo2.app.Extent;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.vista.componentes.Catalogo;
import com.obelisco.vista.componentes.ContenedorReporte;
import com.obelisco.vista.componentes.TextFieldCatalogo;
import com.obelisco.vista.componentes.TextFieldCatalogoListener;
import com.obelisco.vista.controles.BindingDateField;
import com.obelisco.vista.controles.Grid;
import com.obelisco.vista.controles.Label;

public class ContenedorReporteActividadesPorVoluntario extends ContenedorReporte {
	
	private Catalogo catVoluntario;
	private TextFieldCatalogo txtCatalogo;
	private BindingDateField fechaDesde;
	private BindingDateField fechaHasta;
	private Voluntario voluntario;
	
	private IServicioAdministracionReporteActividadesPorVoluntario servicioAdministracionReporteActividadesPorVoluntario;
	
	public Voluntario getVoluntario() {
		return voluntario;
	}

	public void setVoluntario(Voluntario voluntario) {
		this.voluntario = voluntario;
	}
	
	private void initComponents(){
		this.removeAll();
		this.setEnabled(true);
		Grid grid = new Grid();
		grid.setStyleName("Obelisco.GridPaneDialogo");
		grid.setSize(2); //Numero de columnas de la tabla
		grid.setColumnWidth(0, new Extent(150, Extent.PX)); //PX denota pixeles
		Label lblVoluntario = new Label("Voluntario");
		txtCatalogo = new TextFieldCatalogo(100);
		txtCatalogo.setCatalogo(catVoluntario);
		txtCatalogo.addCatalogoListener(this.txtCatVoluntarioListener);
		grid.add(lblVoluntario);
		grid.add(txtCatalogo);
		fechaDesde = new BindingDateField(150);
		fechaHasta = new BindingDateField(150);
		grid.add(new Label("Desde"));
		grid.add(fechaDesde);
		grid.add(new Label("Hasta"));
		grid.add (fechaHasta);
		Column columna = new Column(); // se crea la columna
		columna.add(grid); // se le agrega el grid
		this.add(columna);
	}
	
	private TextFieldCatalogoListener txtCatVoluntarioListener = new TextFieldCatalogoListener(){			
		public void onSeleccionar(Object objeto) {
			setVoluntario(((Voluntario)objeto));	
			txtCatalogo.setText(voluntario.getCodigoVoluntario());
		}			
	};
	
	public Map extraerParametros() {
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("idVoluntario", voluntario.getIdVoluntario());
		parametros.put("codigoVoluntario", voluntario.getCodigoVoluntario());
		parametros.put("cedulaVoluntario", voluntario.getCedulaVoluntario());
		parametros.put("nombreVoluntario", voluntario.getNombreVoluntario());
		parametros.put("apellidoVoluntario", voluntario.getApellidoVoluntario());
		parametros.put("clasificacion", voluntario.getClasificacionString());
		parametros.put("fechaNacimiento", voluntario.getFechaNacimiento());
		parametros.put("emailVoluntario", voluntario.getEmailVoluntario());
		parametros.put("telefonoCelularVoluntario", voluntario.getTelefonoCelularVoluntario());
		parametros.put("sexo", voluntario.getSexo());
		parametros.put("direccionHabitacionVoluntario", voluntario.getDireccionHabitacionVoluntario());
		parametros.put("grupoSanguineo", voluntario.getGrupoSanguineo());
		parametros.put("fechaDesde", fechaDesde.getSelectedDate().getTime());
		parametros.put("fechaHasta", fechaHasta.getSelectedDate().getTime());
		return parametros;
	}

	@Override
	public void inicializar() {
		// TODO Auto-generated method stub
		initComponents();
	}

	@Override
	public List realizarBusqueda() {
		// TODO Auto-generated method stub
		return null;
	}

	public Catalogo getCatVoluntario() {
		return catVoluntario;
	}

	public void setCatVoluntario(Catalogo catVoluntario) {
		this.catVoluntario = catVoluntario;
	}

	public TextFieldCatalogo getTxtCatalogo() {
		return txtCatalogo;
	}

	public void setTxtCatalogo(TextFieldCatalogo txtCatalogo) {
		this.txtCatalogo = txtCatalogo;
	}

	public TextFieldCatalogoListener getTxtCatVoluntarioListener() {
		return txtCatVoluntarioListener;
	}

	public void setTxtCatVoluntarioListener(
			TextFieldCatalogoListener txtCatVoluntarioListener) {
		this.txtCatVoluntarioListener = txtCatVoluntarioListener;
	}

	@Override
	public List obtenerLista() {
		return servicioAdministracionReporteActividadesPorVoluntario.obtenerLista(
				voluntario, fechaDesde.getSelectedDate().getTime(), fechaHasta.getSelectedDate().getTime());
	}

	@Override
	public boolean onValidarDatos() {
		if (voluntario == null)
			throw new ObeliscoException("DEBE SELECCIONAR UN VOLUNTARIO");
		
		if (fechaDesde.getSelectedDate().getTime().after(fechaHasta.getSelectedDate().getTime()))
			throw new ObeliscoException("LA FECHA INICIAL DEBE SER ANTERIOR A LA FECHA FINAL");
		
		return true;
	}

	@Override
	public String rutaArchivoReporte() {
		return null;
	}

	
	// Getters y Setters
	
	public IServicioAdministracionReporteActividadesPorVoluntario getServicioAdministracionReporteActividadesPorVoluntario() {
		return servicioAdministracionReporteActividadesPorVoluntario;
	}

	public void setServicioAdministracionReporteActividadesPorVoluntario(
			IServicioAdministracionReporteActividadesPorVoluntario servicioAdministracionReporteActividadesPorVoluntario) {
		this.servicioAdministracionReporteActividadesPorVoluntario = servicioAdministracionReporteActividadesPorVoluntario;
	}
	
}
